// 这是一个文本框的应用实例，其可以在文本框中输入一个字符串，当单击“确定”按钮
// 会在终端打印出当前输入的字符串；应用代码在“确定”按钮的回调函数中使用gtk_text_buffer_get_bound
// 函数来获得当前输入字符串缓冲区的位置，然后调用get_text_buffer_get_text函数将其放到字符串text中，
// 最后调用g_print函数在终端中输出
#include <gtk/gtk.h>

GtkWidget *text_view;
GtkTextBuffer *buffer;
GtkTextIter *Iter;

void button_event(GtkWidget *widget, gpointer *data){
	
	gchar *text;
	GtkTextIter start,end;
	// 获得缓冲区开始和结束位置的Iter
	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer),&start,&end);

	const GtkTextIter s =start,e=end;
	
	// 获得文本框缓冲区文本
	text = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer),&s,&e,FALSE);
	g_print("%s\n",text);
}

int main(int argc, char *argv[]){

	GtkWidget *window,*button,*box;

	gtk_init(&argc,&argv);
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"文本框测试");
	gtk_widget_set_usize(window,350,350);
	gtk_widget_set_uposition(window,300,200);
	gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

	box = gtk_vbox_new(FALSE,0);
	gtk_container_add(GTK_CONTAINER(window),box);
	gtk_widget_show(box);

	// 创建文本框构件
	text_view = gtk_text_view_new();
	gtk_widget_set_size_request(text_view,300,170);
	gtk_box_pack_start(GTK_BOX(box),text_view,FALSE,FALSE,0);

	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
	gtk_widget_show(text_view);

	button = gtk_button_new_with_label("确定");
	gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(button_event),NULL);
	gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);	
	gtk_widget_show(button);
	gtk_widget_show(window);
	gtk_main();

	return 0;
}
